/**
 * 封装一个函数获取promsie对象， promise对象封装处理网络请求异步任务
          options = {
              method:'get',
              url:''
              data:{}
          }
 * @param {*} options 
 * @returns 
 */
          function myPromise(options) {
            return new Promise((resolve, reject) => {
                ajax({
                    method: options.method,
                    url: options.url,
                    data: options.data,
                    success: function (result) {
                        resolve(result)
                    },
                    fail: function (error) {
                        reject(error)
                    },
                })
            })
        }
        /**
         let options = {
                    method:  'get',
                    url: '',
                    data:{
                        username:'jack'
                        age:18
                    },
                    success:function(data){
                            
                    }
                }
         */
        function ajax(options) {
            // 1. 创建XMLHttpRequest
            let xhr = new XMLHttpRequest()
            let param = formateParam(options.data) // name=jack&age=18
            let method = options.method.toUpperCase()
            // 2. 建立连接
            if (method == 'GET') {
                xhr.open(options.method, options.url + '?' + param)
                // 3. 发送请求
                xhr.send()
            } else if (method == 'POST') {
                xhr.open(options.method, options.url)
                xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
                xhr.send(param)
            }
        
            // 4. 接收响应数据
            xhr.onreadystatechange = function () {
                // 4.1 是否响应完成
                if (xhr.readyState === 4) {
                    // 4.2 是否成功响应
                    if (xhr.status === 200) {
                        let data = xhr.responseText // 响应内容
                        data = JSON.parse(data)
                        options.success(data)
                    } else {
                        alert('网络出错 ' + xhr.status)
                    }
                }
            }
        }
        
        /**
         * 格式化参数
         *  {name:'jack',age:18}  =>  name=jack&age=18
         *   遍历对象，属性转换成名称=值形式，存储到数组, 再将数组元素用&符号拼接join('&)
         *    ['name=jack','age=18']  ->
         */
        function formateParam(obj) {
            let arr = []
            for (const key in obj) {
                let item = `${key}=${obj[key]}` // name=jack   age=18
                arr.push(item) // ['name=jack','age=18;]
            }
            return arr.join('&') // name=jack&age=18
        }
        
        // let str = formateParam({name:'jack',age:18})
        // console.log(str)
        